package org.huang.properties.bean;

import org.springframework.boot.context.properties.ConfigurationProperties;
import org.springframework.context.annotation.PropertySource;
import org.springframework.stereotype.Component;

import java.util.ArrayList;
import java.util.List;

/**
 * @描述: 对象属性注入是实体类
 * @作者 Mr.Huang
 * @创建时间 2017-08-08
 * @版本: 1.0
 */

@Component
//讨论一个问题：如果我的文件名不是application.properties,或者application.yml时怎么办？
// 网上的方法是：(我使用的版本@ConfigurationProperties已经没有locations这个属性)
//  使用@PropertySource指定文件路径，但是这种做法并不能解决所有问题。如：
//      1.我在application.properties 中 也有定义，那么下面的注解将失去作用。
//      2.对于yml文件无效
//@PropertySource("classpath:application-person.properties")
//解决方案：
// 在实际的过程中，建议使用profile的管理方式解决该问题。

@ConfigurationProperties(prefix="person") //属性的前缀，如果没有则可以不写
public class ConfigurationPropertiesBean {

    private String firstName;
    private Integer age;
    //Spring Boot 会自动转换类型，当使用List的时候需要注意在配置中对List进行初始化！
    private List<String> friends = new ArrayList<String>();


    //这两个属性是测试匹配规则
    private String lastName;
    private Integer goodNum;

    private Parent parent;


    public String getFirstName() {
        return firstName;
    }

    public void setFirstName(String firstName) {
        this.firstName = firstName;
    }

    public Integer getAge() {
        return age;
    }

    public void setAge(Integer age) {
        this.age = age;
    }

    public List<String> getFriends() {
        return friends;
    }

    public void setFriends(List<String> friends) {
        this.friends = friends;
    }

    public Parent getParent() {
        return parent;
    }

    public void setParent(Parent parent) {
        this.parent = parent;
    }

    public String getLastName() {
        return lastName;
    }

    public void setLastName(String lastName) {
        this.lastName = lastName;
    }

    public Integer getGoodNum() {
        return goodNum;
    }

    public void setGoodNum(Integer goodNum) {
        this.goodNum = goodNum;
    }

    @Override
    public String toString() {
        return "ConfigurationPropertiesBean{" +
                "firstName='" + firstName + '\'' +
                ", age=" + age +
                ", friends=" + friends +
                ", lastName='" + lastName + '\'' +
                ", goodNum=" + goodNum +
                ", parent=" + parent +
                '}';
    }
}
